$Description$
一次舞会有$n$个男孩和$n$个女孩。每首曲子开始时,所有男孩和女孩恰好配成$n$对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。有一些男孩女孩相互喜欢,而其他相互不喜欢(不会”单向喜欢“)。每个男孩最多只愿意和$k$个不喜欢的女孩跳舞,而每个女孩也最多只愿意和$k$个不喜欢的男孩跳舞。给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲?
$Solution$
二分答案$ans$
把每个人$i~$拆成喜欢对方$i_1~$和不喜欢对方$i_2~$两个点
从源点$s$向$i_1~$连容量为$ans$的边,表示限制$ans$支舞曲
再从$i_1~$连向$i_2~$连边,容量为$k$
这样的话就解决了这个问题
接下来就很好办了
若男生$i$和女生$j$互相喜欢
$i_1$连向$j_1$
若男生$i$和女生$j$互相不喜欢
$i_2$连向$j_2$
而女生之间的连边类似于男生
(你就想,如果这个图反过来是一样的,所以怎么连边就很清晰了)
这个时候跑最大流
求出来的就是最大的匹配数
如果最大流恰好等于$ans\times n$
也就是恰好$ans\times n$组匹配,意味着可行
$Code$
1 |
|